import { getCurrentInstance } from 'vue'

/**
 * 函数节流
 * @param func 执行函数
 * @param time 周期
 * @returns
 */
export function throttle(func: Function, time = 1000) {
  // 标志：是否处于中止状态
  let isSuspended = false
  return (...args: any) => {
    // 处于中止状态直接返回
    if (isSuspended) {
      return
    }
    // 进入中止状态
    isSuspended = true
    // 指定时间后执行函数并结束中止状态
    setTimeout(() => {
      func(...args)
      isSuspended = false
    }, time)
  }
}

/**
 * 提取字符串内容
 * @param reg 提取规则
 * @param source 源字符串
 * @returns
 */
export function extractStrings(reg: RegExp, source: string): string[] {
  const list: string[] = []
  let result: RegExpExecArray | null = null
  do {
    result = reg.exec(source)
    result && list.push(result[1])
  } while (result)
  return list
}

/**
 * 将方法绑定到组件上
 * @param key 方法名
 * @param method 方法
 */
export function bindMethod(key: string, method: Function) {
  const instance: any = getCurrentInstance()
  instance.ctx[key] = method
}
